import 'package:plugin_platform_interface/plugin_platform_interface.dart';

import 'flutter_device_info_plugin_method_channel.dart';

abstract class FlutterDeviceInfoPluginPlatform extends PlatformInterface {
  /// Constructs a FlutterDeviceInfoPluginPlatform.
  FlutterDeviceInfoPluginPlatform() : super(token: _token);

  static final Object _token = Object();

  static FlutterDeviceInfoPluginPlatform _instance = MethodChannelFlutterDeviceInfoPlugin();

  /// The default instance of [FlutterDeviceInfoPluginPlatform] to use.
  ///
  /// Defaults to [MethodChannelFlutterDeviceInfoPlugin].
  static FlutterDeviceInfoPluginPlatform get instance => _instance;

  /// Platform-specific implementations should set this with their own
  /// platform-specific class that extends [FlutterDeviceInfoPluginPlatform] when
  /// they register themselves.
  static set instance(FlutterDeviceInfoPluginPlatform instance) {
    PlatformInterface.verifyToken(instance, _token);
    _instance = instance;
  }

  Future<String?> getIDFA() {
    throw UnimplementedError('getIDFA() has not been implemented.');
  }

  Future<String?> getIDFV() {
    throw UnimplementedError('getIDFV() has not been implemented.');
  }

  Future<String?> getAppVersion() {
    throw UnimplementedError('getAppVersion() has not been implemented.');
  }

  Future<String?> getSystemVersion() {
    throw UnimplementedError('getSystemVersion() has not been implemented.');
  }

  Future<String?> getSystemName() {
    throw UnimplementedError('getSystemName() has not been implemented.');
  }

  Future<String?> originalDeviceInfo() {
    throw UnimplementedError('originalDeviceInfo() has not been implemented.');
  }

  Future<String?> deviceNameplate() {
    throw UnimplementedError('deviceNameplate() has not been implemented.');
  }

  Future<String?> getLocalTimeZone() {
    throw UnimplementedError('getLocalTimeZone() has not been implemented.');
  }

  Future<String?> getLocalLanguageCode() {
    throw UnimplementedError('getLocalLanguageCode() has not been implemented.');
  }

  Future<Map<dynamic,dynamic>?> getWifiInfo() {
    throw UnimplementedError('getWifiInfo() has not been implemented.');
  }

  Future<bool?> isSimulator() {
    throw UnimplementedError('isSimulator() has not been implemented.');
  }

  Future<bool?> isPhoneJailbreak() {
    throw UnimplementedError('isPhoneJailbreak() has not been implemented.');
  }

  Future<String?> getTotalDiskSize() {
    throw UnimplementedError('getTotalDiskSize() has not been implemented.');
  }

  Future<String?> getTotalMemorySize() {
    throw UnimplementedError('getTotalMemorySize() has not been implemented.');
  }

  Future<String?> getAvailableDiskSize() {
    throw UnimplementedError('getAvailableDiskSize() has not been implemented.');
  }

  Future<String?> getAvailableMemorySize() {
    throw UnimplementedError('getAvailableMemorySize() has not been implemented.');
  }

  Future<String?> getNetReachableType() {
    throw UnimplementedError('getNetReachableType() has not been implemented.');
  }

  reportFaceBook(String? urlScheme,String? appId,String? displayName,String? clientToken) {
    throw UnimplementedError('reportFaceBook() has not been implemented.');
  }

  showDeniedAccessAlert(String? message) {
    throw UnimplementedError('showDeniedAccessAlert() has not been implemented.');
  }

  Future<dynamic> openContact() {
    throw UnimplementedError('openContact() has not been implemented.');
  }

  Future<dynamic> getContactInfo() {
    throw UnimplementedError('openContact() has not been implemented.');
  }

  Future<dynamic> startLocation() {
    throw UnimplementedError('startLocation() has not been implemented.');
  }

  showSKStoreReview() {
    throw UnimplementedError('showSKStoreReview() has not been implemented.');
  }

}
